package 剑指offer_力扣版.Month07.day04数组;

import java.util.HashMap;
import java.util.Map;

public class 和为K的子数组 {
    public int subarraySum(int[] nums, int k) {
        Map<Integer,Integer> map = new HashMap();
        map.put(0,1);//注意这里，一定要加这个，防止nums[0] == k
        int res = 0;//定义当前窗口的和
        int count = 0;//定义一个计数器
        for(int i:nums){
            res += i;
            count += map.getOrDefault(res - k,0);//这里的话是res - k
            map.put(res,map.getOrDefault(res,0) + 1);
        }
        return count;
    }

    //如果说全部是正数可以这么搞
    // public int subarraySum(int[] nums, int k) {
    //     int pre = 0;//滑动窗口起始位置
    //     int num = 0;//滑动窗口和
    //     int count = 0;//记录个数
    //     for(int i = 0;i < nums.length;i++){
    //         num += nums[i];
    //         while(pre <= i && num >= k){
    //             if(num == k) count++;
    //             num -= nums[pre];
    //             pre++;
    //         }
    //     }
    //     return count;
    // }
}
